const parser = require('@babel/parser');
const generator= require('@babel/generator').default
const traverse = require('@babel/traverse').default;
const t = require('@babel/types');  

const fs = require('fs');  

/**  
 * 保存path.node为json文件，命名为<type>.json  
 * @param {NodePath} path   
 */  
function saveAstNodeAsJson(path) {  
  console.log('path-->',path)
  const type = path.node.type;  
  fs.writeFileSync(`${type}.json`, JSON.stringify(path.node, null, 2), 'utf-8');  
  console.log(`已保存为 ${type}.json`);  
}
// 将 JavaScript 代码解析为 AST
const ast = parser.parse(`
  const double = x => x * 2;
  const result = double(3);
`);

// 遍历 AST，并对所有函数调用进行修改
traverse(ast, {
  CallExpression(path) {
    saveAstNodeAsJson(path)
    // // 如果当前节点表示一个函数调用
    if (path.node.callee.name === 'double') {
    //   // 将函数名修改为 triple
      path.node.callee.name = 'triple';
    //   // 将函数调用的参数修改为原参数的两倍
      path.node.arguments[0] = {
        type: 'NumericLiteral',
        value: path.node.arguments[0].value * 2,
      };
    }
        console.log(path);
    },
});

// 将修改后的 AST 转换回 JavaScript 代码
const code =generator(ast).code;

console.log(code);

